home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar 2004 April
/
Gamestar_61_2004-04_dvdb.iso
/
DVDStar
/
Editace
/
hltp.exe
/
{app}
/
Source Code
/
Zoners Half-Life Tools
/
common
/
winding.h
< prev
Wrap
C/C++ Source or Header
|
2002-05-20
|
3KB
|
82 lines
#ifndef WINDING_H__
#define WINDING_H__
#if _MSC_VER >= 1000
#pragma once
#endif
#include "basictypes.h"
#include "mathtypes.h"
#include "win32fix.h"
#include "mathlib.h"
#include "bspfile.h"
#include "boundingbox.h"
#define MAX_POINTS_ON_WINDING 128
// TODO: FIX THIS STUPID SHIT (MAX_POINTS_ON_WINDING)
#define BASE_WINDING_DISTANCE 9000
#define SIDE_FRONT 0
#define SIDE_ON 2
#define SIDE_BACK 1
#define SIDE_CROSS -2
class Winding
{
public:
// General Functions
void Print() const;
void getPlane(dplane_t& plane) const;
void getPlane(vec3_t& normal, vec_t& dist) const;
vec_t getArea() const;
void getBounds(BoundingBox& bounds) const;
void getBounds(vec3_t& mins, vec3_t& maxs) const;
void getCenter(vec3_t& center) const;
Winding* Copy() const;
void Check() const; // Developer check for validity
bool Valid() const; // Runtime/user/normal check for validity
void addPoint(const vec3_t newpoint);
void insertPoint(const vec3_t newpoint, const unsigned int offset);
// Specialized Functions
void RemoveColinearPoints();
bool Clip(const dplane_t& split, bool keepon); // For hlbsp
void Clip(const dplane_t& split, Winding** front, Winding** back);
void Clip(const vec3_t normal, const vec_t dist, Winding** front, Winding** back);
bool Chop(const vec3_t normal, const vec_t dist);
void Divide(const dplane_t& split, Winding** front, Winding** back);
int WindingOnPlaneSide(const vec3_t normal, const vec_t dist);
void CopyPoints(vec3_t *points, int &numpoints);
void initFromPoints(vec3_t *points, UINT32 numpoints);
void Reset(void); // Resets the structure
protected:
void resize(UINT32 newsize);
public:
// Construction
Winding(); // Do nothing :)
Winding(vec3_t *points, UINT32 numpoints); // Create from raw points
Winding(const dface_t& face);
Winding(const dplane_t& face);
Winding(const vec3_t normal, const vec_t dist);
Winding(UINT32 points);
Winding(const Winding& other);
virtual ~Winding();
Winding& operator=(const Winding& other);
// Misc
private:
void initFromPlane(const vec3_t normal, const vec_t dist);
public:
// Data
UINT32 m_NumPoints;
vec3_t* m_Points;
protected:
UINT32 m_MaxPoints;
};
#endif